Inspiration:
Last semester, I saw a flock of birds swooping down past a tree.  Each of the birds flew around the tree, but the whole flock seemed to move as one object.  I thought this would be an interesting behavior to model.


Overview of Major Objects:

Camera (not an object per se, but it was the starting point)
- began here, since a visual simulation is pointless unless you have a good view of the action
- I began all wrong, left some of the code to see it.  Tried doing a vector based approach.
- ended up switching to the much simpler spherical coordinate model and using standard 3d transformations

Path 
- list of points connected with line segments
- has an attractor

Attractor
- follows the path
- Highlight on fun vector math

Sphere
- not the OS!
- a base class for birds and obstacles

Bird
- describe color mapping function

R O Y G B I V
             
__        __ 
  \      /   
   \____/    Red
             
  ____       
 /    \      
/      \____ Green
             
      ____   
     /    \  
____/      \ Blue


Flock
- manages a collection of birds

Obstacle
- birds try to avoid these

ObstacleManager
- manages a collection of obstacles


Progression of simulation, highlighting interesting developments:

Orbiting

Weaving

Molecule

Flocking
- show before and after deflection along plane perpendicular to bird's velocity



Key (Group)	Action


ESCAPE	Exit program

(Simulation Modes, increasing in realism)
1		Orbiting
2		Weaving
3		Molecule
4		Flocking

(Simulation parameters)
W		increase bird avoidance
S		decrease bird avoidance
E		increase chase acceleration
D		decrease chase acceleration
SPACE		reset simulation (clear all birds and obstacles and set to orbiting mode)

(Path Shape)
5		Simple Circle
6		Wavy Oval
7		Figure 8
8		Twisted Figure 8
9		Rollercoaster

(Attractor)
Q		increase speed
A		decrease speed

(Flock)
R		add bird
F		remove bird

(Obstacles)
M		toggle obstacle editing mode
T		add obstacle
G		remove obstacle
Left-drag	change position in x-z plane
Middle-drag	change position in y axis
Right-drag	change size of radius and effectiveRadius

(Camera)
Left-drag	Rotate around object in focus
Center	Cycle camera mode
Right-drag	Move along line of sight

(Toggle Visibility)
Z		Attractor
X		Path
C		Teapot
V		Bird Bubbles
B		Obstacle Bubbles

(Generator)
N		swap generation point between world origin and attractor